import Vue from 'vue'
import App from './App.vue'
import router from './router'

// 导入相关依赖，在main.js文件中导入(element依赖和axios依赖)，全局依赖
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import axios from 'axios'
Vue.use(ElementUI);

// 绑定全局的axios实例到Vue原型上
Vue.prototype.$axios = axios;
Vue.config.productionTip = false

// 使用axios请求拦截器，给每个请求加上jwt请求头
axios.interceptors.request.use(
  config => {
    let jwt = localStorage.getItem("authentication")
    if (jwt) {
      config.headers.authentication = jwt //相当于 { headers: { 'authentication': jwt } }
    }
    return config
  }
)

// 添加响应拦截器
axios.interceptors.response.use(
  response => {
    // 处理正常响应
    if (response.data.code === 2003 || response.data.code === 401) {
      // JWT过期或无效
      handleAuthError()
    }
    return response
  },
  error => {
    // 处理异常响应
    if (error.response) {
      // 处理特定的HTTP状态码
      if (error.response.status === 401 || 
          error.response.status === 403 || 
          (error.response.data && error.response.data.code === 2003)) {

        handleAuthError()
      }
    }
    return Promise.reject(error)
  }
)

// 统一处理认证错误
function handleAuthError() {
  
  // 清除本地存储的token
  localStorage.removeItem("authentication")
  
  // 获取当前路由路径
  const currentPath = router.currentRoute.fullPath
  
  // 如果当前已经在登录页或者URL中包含redirect参数，则直接跳转到登录页
  if (currentPath.includes('/') || currentPath.includes('redirect')) {
    router.push('/')
    return
  }
  
  // 正常重定向到登录页，并携带原始路径
  router.push({
    path: '/',
    query: {
      redirect: currentPath
    }
  })
 

}

new Vue({
  router,
  render: h => h(App)
}).$mount('#app')
